<html>
  <head>
    <title>覆盖完整Razor页面</title>
  </head>
  <body>
    <script>
      /*
        3、完全覆盖剃刀页面

                                         你可能希望完全覆盖页面： Razor 页面与页面相关的C#文件。
                                         
                                         在这种情况下：

                                              ①、就像上面描述的那样覆盖页面模型类，但不要替换现有的页面模型类。

                                              ②、覆盖上面描述的Razor页面，但也更改@model指令以指向您的新页面模型。


                                        eg:  示例  此示例覆盖由帐户模块定义的登录页面。

                                              创建从LoginModel派生的页面模型类  在Volo.Abp.Account.Web.Pages.Account命名空间中定义）：

                                              （   如果您使用的是AbpAccountWebOpenIddictModule或AbpAccountPublicWebOpenIddictModule，
                                                
                                                   则基类是OpenIddictSupportedLoginModel而不是LoginModel。
                                                   
                                                   您应该将ExposeServices属性更改为[ExposeServices(typeof (MyLoginModel), typeof(OpenIddictSupportedLoginModel), typeof(LoginModel))]
                                                  
                                                ）

                                                        [ExposeServices(typeof (MyLoginModel), typeof(LoginModel))]
                                                        public class MyLoginModel : LoginModel
                                                        {
                                                            public MyLoginModel(
                                                                IAuthenticationSchemeProvider schemeProvider,
                                                                IOptions<AbpAccountOptions> accountOptions
                                                                ) : base(
                                                                schemeProvider,
                                                                accountOptions)
                                                            {

                                                            }
   
                                                            public override Task<IActionResult> OnPostAsync(string action)
                                                            {
                                                                // 添加逻辑
                                                                return base.OnPostAsync(action);
                                                            }

                                                            //TODO: Add new methods and properties...
                                                        }

                                                如果需要，您可以覆盖任何方法或添加新的属性/方法。

                                                如上所述，将Login.cshtml文件复制到您的解决方案中。更改@model指令以指向MyLoginModel：

                                                         @page
                                                          ...
                                                          @model Acme.BookStore.Web.Pages.Account.MyLoginModel
                                                          ...      
                                                          
                                                          
                                                就是这么简单，在视图中进行任何更改并运行你的应用程序。



                                        ★、无需继承即可替换页面模型

                                                        你不必就从原始页面模型继承（就像前面的示例中所做的那样）。

                                                        相反，你可以自己完全重新实现页面。
                                                        
                                                        在这种情况下，只需要从 PageModel、AbpPageModel 或者你需要的任何适合的基类派生。
      */
    </script>
  </body>
</html>